# 参考第 9 节的综合案例中的学生信息管理，来实现一个自动取款机的存取款模拟效果。要求有登陆和退出、查询余额、取钱，存钱等操作。

'''
陈老板钱庄所需功能
1、用户数据
2、交互界面
3、登陆
4、余额查询
5、取款
6、存款
7、退出
'''

#1\ 用户数据
account_data = [
    {'account':'123','password':'123456','deposit':2000},
    {'account':'456','password':'356789','deposit':1000},
    {'account':'789','password':'578394','deposit':1223}]

#定义一个空列表为了记住当前操作用户信息
account_list = []
#2\交互界面

def show_option():
    print('*' * 20, '欢迎来到陈老板钱庄', '*' * 20)
    print('{:15} {:{}<13} {:<15}'.format(' ', '1. 登陆', chr(12288), '2. 余额'))
    print('{:15} {:{}<13} {:<15}'.format(' ', '3. 取款', chr(12288), '4. 存款'))
    print('{:26}{:30}'.format(' ','5. 登出'))
    print('=' * 57)

# 测试交互界面
# show_option()

#3/登陆
def login():
    '''
    判断用户的登陆信息是否存在于account_data中
    :return:
    '''
    #声明accountlist是全局变量，方便登陆函数添加当前登陆用户的信息给其他函数用
    global account_list
    #让用户输入自己的账户密码
    account = input('请输入您的账户：')
    password = input('请输入您的密码：')

    for i, account_dict in enumerate(account_data):
            # 判断用户信息是否正确
        if account_dict['account'] == account and account_dict['password'] == password:
            #当用户信息存在的时候，把索引和用户信息存放到accountlist列表中
            # account_list.append(i)
            account_list.append(account_dict)

    # 判断列表是不是为空
    if account_list != []:
            # 不为空是，代表用户输入的用户存在，则提示登陆成功
        print('{:^50}'.format('------登陆成功------\n'))
        # 否则就是没有找到用户的数据，代表密码或账户错误
    else:
            # 提示用户需不需要重新输入，输入y重新引用本函数，否则结束本函数
        if input('您输入的密码有误，是否重新输入？y/n') == 'y':
           login()
# # 测试登陆


# 4/余额查询

def deposit_money():
    '''
    查询用户账户余额
    :return:
    '''
    print('*' * 20, '欢迎来到陈老板钱庄', '*' * 20)
    print(' '*20,'您的账户余额为{:^8}元!'.format(account_list[0]['deposit']))
    print('='*60)


# 5/存钱

def save_money():
    '''
    存钱操作
    :return:
    '''
    money = float(input('请输入您需要存入的金额:')) #用is_integer判断一个浮点是否为整数
    #用户输入完金额之后在余额的基础上累加
    if money.is_integer() == False:
        print('please enter integer!!!')
        save_money()
    else:
        #把用户输入的金额加入到用户数据中去
        account_list[0]['deposit'] += money
        print('*'*60)
        print(' '*15,'You are successfully save in {:^0} yuan!'.format(money))
        print('*'*60)

#6/取钱操作

def draw_money():
    '''
    用户取钱
    :return:
    '''
    draw_amount = float(input('请输入你需要取出的金额：')) #一样判断是否为整数
    if draw_amount.is_integer() == False:
        print('请输入整数！！！')
        draw_money()

    if account_list[0]['deposit'] >= draw_amount:
        account_list[0]['deposit'] -= draw_amount
        print('*' * 60)
        print(' ' * 15, 'You are successfully draw out {:^0} yuan!'.format(draw_amount))
        print('*' * 60)
    else:
         print('=' * 78)
         print('{:^78}'.format('余额不足!!!'))
         print('=' * 78)
         interact_sys()

# 7/退出
def logOut():
    '''
    登出，可扩展成退出时保存用户操作的信息到数据库
    :return:
    '''
    print('='*78)
    print('='*30,'感谢使用，再见！！！','='*29)
    print('=' * 78)

# 总控制
def interact_sys():
    '''
    界面控制，各个功能的调用
    :return:
    '''
    #使用'死循环'while循环可以保证程序在用户输入完成以后可以继续使用
    #调用界面
    while True:
        show_option()
        key = input('option number:')
        if key == '1':
            #判断用户有没有登陆
            if account_list != []:
                print('-'*10,'您已经登陆，如要登陆新账户，请先退出！','-'*10)
            else:
                login()
        elif key =='2':
            #首先判断用户是否有登陆
            if account_list == []:
                print('-'*20,'please login first!!!!','-'*20)
            else:
                deposit_money()
                input('enter any key for return')
        elif key == '3':
            if account_list == []:
                print('-' * 20, 'please login first!!!!', '-' * 20)
            else:
                draw_money()
                input('enter any key for return')
        elif key == '4':
            if account_list == []:
                print('-' * 20, 'please login first!!!!', '-' * 20)
            else:
                save_money()
                input('enter any key for return')
        elif key == '5':
            #登出函数
            logOut()
            break
        else:
            print('wrong enter,please try again!!')



interact_sys()
